home *** CD-ROM | disk | FTP | other *** search
/ PC-SIG Library 8 / PC-SIG Library CD-ROM (8th Edition) (1990-04).iso / 001_100 / disk0004 / meteor.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  3.4 KB  |  80 lines

  1. 100  REM meteor, a character graphics arcade game
  2. 120  M$=CHR$(2):C$=CHR$(219):X$=CHR$(25):REM face, solid square, down arrow
  3. 130  C5$=C$+C$+C$+C$+C$:H$="":T=0:REM block, latch for face motion, score
  4. 140  Y=178:E1$=STRING$(1,Y):E3$=STRING$(3,Y):E6$=STRING$(6,Y):REM shading
  5. 145  CLS:KEY OFF:WIDTH 80:LOCATE 10,1
  6. 150  PRINT "Do you want directions (Y/N)?":R=523:REM random seed
  7. 160  R$=INKEY$:IF R$="Y" OR R$="y" THEN GOSUB 740:GOTO 180
  8. 170  IF R$="N" OR R$="n" OR R$=CHR$(13) THEN 180 ELSE R=(R+511)MOD 32003:GOTO 160
  9. 180  RANDOMIZE R:REM seed based on delay in ansering question
  10. 190  PRINT "How hard (1-9)?";
  11. 200  R$=INKEY$:C=ASC(R$+" "):IF C>48 AND C<58 THEN C=C-48:GOTO 220
  12. 210  IF C=13 THEN C=5 ELSE 200
  13. 220  HX=20+INT(40*RND+1):HY=16+INT(8*RND+1):REM position for face
  14. 230  CLS:LOCATE 25,1:COLOR 2:PRINT "METEOR! (Cursors move ";;:COLOR 3:PRINT M$;:COLOR 2:PRINT ")";
  15. 240  GOSUB 680:REM put targets, player marker
  16. 250  Y1=1:Y2=24:REM describe meteor path
  17. 260  X1=INT(RND*80+1):X2=INT(RND*80+1):REM each is inter 1-80
  18. 270  GOSUB 350:GOTO 260:REM plot meteor path, repeat
  19. 280  REM plot x$ at y,x checking for scores, face motion
  20. 290  K$=INKEY$:IF K$<>"" THEN H$=K$:REM h$ is latch
  21. 300  IF LEN(H$)>0 THEN GOSUB 500:REM key was struck
  22. 310  IF ABS(X-HX)<1 AND ABS(Y-HY)<1 THEN 400:REM face hit
  23. 320  IF SCREEN(Y,X)=219 THEN C2=-1:SOUND 660,2:GOSUB 620:REM target hit
  24. 330  IF Y=24 AND X=80 THEN X=79:REM writing 24,80 causes scrolling
  25. 340  LOCATE Y,X:COLOR 4:PRINT X$;:RETURN
  26. 350  REM draw a line from x1,y1 to x2,y2
  27. 360  S0=(X2-X1)/(Y2-Y1):S=X1-S0
  28. 370  FOR Y=Y1 TO Y2:S=S+S0:X=INT(0.5+S)
  29. 380  IF Y>HY+1 THEN RETURN:REM give up if below target
  30. 390  GOSUB 280:NEXT Y:RETURN
  31. 400  REM target is hit, position message
  32. 410  HX=HX-4:IF HX>72 THEN HX=72
  33. 420  IF HX<1 THEN HX=1
  34. 430  IF HY=24 THEN HY=23
  35. 440  SOUND 400,8:LOCATE HY,HX:COLOR 5:PRINT E1$;:COLOR 6:PRINT "BANG";:COLOR 5:PRINT E1$;:LOCATE HY+1,HX:PRINT E6$;
  36. 450  LOCATE 25,35:COLOR 2:PRINT "    DEL = FINISH,  INS = PLAY AGAIN          ";
  37. 460  H$=INKEY$:IF H$=CHR$(0)+CHR$(83) THEN CLS:KEY ON:END
  38. 470  IF H$=CHR$(0)+CHR$(83) THEN CLS:KEY ON:END
  39. 480  IF H$=CHR$(0)+CHR$(82) THEN CLS:RUN
  40. 490  GOTO 460
  41. 500  REM process keyboard request
  42. 510  IF H$=CHR$(32) THEN 630:REM pause on space bar
  43. 520  IF LEN(H$)=1 THEN H$="":RETURN
  44. 530  HH=ASC(RIGHT$(H$,1)):K$=H$:H$="":LOCATE HY,HX:PRINT " ";
  45. 540  IF HH=77 THEN HX=HX+1:H$=K$:IF HX>80 THEN HX=1
  46. 550  IF HH=75 THEN HX=HX-1:H$=K$:IF HX<1 THEN HX=80
  47. 560  IF HH=80 AND HY<24 THEN HY=HY+1:H$=K$
  48. 570  IF HH=72 AND HY>1 THEN HY=HY-1:H$=K$
  49. 580  IF HH=80 AND HY=24 THEN HY=23
  50. 590  IF SCREEN(HY,HX)=219 THEN SOUND 440,1:C2=10:GOSUB 620
  51. 600  IF SCREEN(HY,HX)=25 THEN SOUND 420,1:C2=2:GOSUB 620
  52. 610  LOCATE HY,HX:COLOR 3:PRINT M$;:RETURN
  53. 620  T=T+C2:LOCATE 25,27:COLOR 1:PRINT T;:RETURN:REM score points
  54. 630  LOCATE 25,35:COLOR 2:PRINT "KEYS:  INS=CONTINUE, DEL=STOP, ENTER=RESTORE ";
  55. 640  H$=INKEY$:IF H$=CHR$(0)+CHR$(82) THEN 720
  56. 650  IF H$=CHR$(13) THEN 680
  57. 660  IF H$=CHR$(0)+CHR$(83) THEN CLS:KEY ON:END
  58. 670  GOTO 640
  59. 680  REM put targets and face on screen
  60. 690  FOR I=12-C TO 24-C
  61. 700  LOCATE I,15:COLOR 7:PRINT C5$;:LOCATE I,35:PRINT C5$;:LOCATE I,55:PRINT C5$;
  62. 710  NEXT I:LOCATE HY,HX:COLOR 3:PRINT M$;
  63. 720  LOCATE 25,35:COLOR 2:PRINT "     Hit space bar to pause                  ";
  64. 730  RETURN
  65. 740  REM directions
  66. 750  CLS:PRINT :PRINT TAB(35);"METEOR":PRINT :PRINT
  67. 760  PRINT "A simple arcade game using character graphics."
  68. 770  PRINT :PRINT "The cursor control keys start the ";:COLOR 3:PRINT M$;:COLOR 1:PRINT " symbol moving."
  69. 780  PRINT "The space bar stops all action temporarily, and allows ";
  70. 790  PRINT "restoring targets."
  71. 800  PRINT "Any letter (and some other keys) will stop cursor motion."
  72. 810  PRINT :PRINT "See if you can erase the solid blocks before a falling ";
  73. 820  PRINT "meteor hits you."
  74. 830  PRINT "Each ";:COLOR 7:PRINT C$;:COLOR 1:PRINT " you erase scores 10 points, each ";:COLOR 4:PRINT X$;:COLOR 1:PRINT " 2 points."
  75. 840  PRINT "You lose 1 point for each ";:COLOR 7:PRINT C$;:COLOR 1:PRINT " a meteor hits."
  76. 850  PRINT :PRINT "To hit you, a meteor needs to get within the shaded area.";
  77. 860  PRINT :COLOR 6:PRINT  TAB(37);E3$:PRINT TAB(37);E1$;:COLOR 3:PRINT M$;:COLOR 6:PRINT E1$
  78. 870  PRINT TAB(37);E3$:PRINT:COLOR 1
  79. 880  PRINT "Some extra instructions will be on the bottom line.":PRINT :RETURN
  80.